perm filename PART15.TEX[1,RWF]1 blob sn#540146 filedate 1980-10-09 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	Sample Program
C00006 00003
C00008 00004	\sample
C00011 ENDMK
CāŠ—;
Sample Program


  THIS PROGRAM BEHAVES LIKE A CALCULATOR. IT EVALUATES EXPRESSIONS 
  CONTAINING THE OPERATORS +, -, *, /  STRICTLY FROM LEFT TO RIGHT.
  NO PARENTHESES OR BLANKS ARE ALLOWED WITHIN THE EXPRESSION.      
  THE EXPRESSION IS TERMINATED BY AN EQUAL SIGN  ( = ) .           

PROGRAM CALCULATOR ( INPUT*, OUTPUT ) ;
VAR     EXP,                    (* CURRENT VALUE OF EXPRESSION       *)
        NEW      : REAL ;       (* HOLDS VALUE LAST READ IN          *)
        UNDEF,                  (* FLAGS AN UNDEFINED OPERATOR       *)
        NOTDONE  : BOOLEAN ;    (* FLAG SIGNALLING END OF EXPRESSION *)
        C        : CHAR ;       (* OPERATOR                          *)
BEGIN
READ ( EXP ) ;
UNDEF := FALSE ;
NOTDONE := TRUE ;
\allowbreak
WHILE NOTDONE DO
    BEGIN
    READ ( C );
    IF C <> '='  THEN
        BEGIN
        READ ( NEW ) ;
        IF  C = '+'  THEN   EXP := EXP + NEW
        ELSE IF C = '-'  THEN  EXP := EXP - NEW
            ELSE IF  C = '*'  THEN  EXP := EXP * NEW
                ELSE IF  C = '/'  THEN  EXP := EXP / NEW
                    ELSE 
                        BEGIN
                        NOTDONE := FALSE ;
                        UNDEF := TRUE ;
                        WRITELN ( ' UNDEFINED OPERATOR' )
                        END
        END
    ELSE  NOTDONE := FALSE
    END ;
IF NOT UNDEF  THEN  WRITE ( EXP :8 :4 )
END.

3.0+5.0*4.5-3.0/11.0=
  3.0000

3.0∧5.0=
 UNDEFINED OPERATOR

Exercise

Write a PASCAL program that first reads in an image consisting of two
characters  `/' and  `*' from a data file and then searches
through the image to find the largest square region solidly filled with
asterisks.  For instance, in the following example, the upper left-hand
corner of the largest square is at row 5, column 8.

////////////////
/*//////////////
//*/*****///////
*///***///*/////
////********////
//***//*****////
//*/*//****/////
//****/****/**/*
///**//*//////**

The input file contains:  

---on the first line, the number of columns and rows in the image.
---on each of the following lines, starting from the first position on
\ \ \ that line, one row of the image.

You can assume the size of the image will be less than 60x20 characters.

Your final output should be a picture of the image with the largest square
of asterisks replaced by 0's.  If you find more than one square of the maximum
size, use the upper left one.
\endexercise
\sample
\sendnotes{Strings: pig-latin example}

\startcode
(****************************************************************)
(*                                                              *)
(*  EXAMPLE IN USE OF LOTS STRING PACKAGE.                      *)
(*  THIS PROGRAM TRANSLATES AN ENGLISH WORD INTO PIG-LATIN      *)
(*                                                              *)
(****************************************************************)

PROGRAM PIGLATIN ( INPUT*, OUTPUT ) ;

VAR     I       : INTEGER ;
        SOURCE,
        TARGET  : STRING ;

FUNCTION VOWEL ( LETTER : CHAR ) : BOOLEAN ;
BEGIN
VOWEL := ( LETTER = 'A' )
OR ( LETTER = 'E' )
OR ( LETTER = 'I' )
OR ( LETTER = 'O' )
OR ( LETTER = 'U' )
END ;  (* VOWEL *)
\allowbreak
BEGIN
(* READ INPUT *)
READ ( SOURCE ) ;

(* CHECK THE FIRST CHARACTER *)

IF VOWEL ( GETCHAR(SOURCE, 1) )  THEN

    BEGIN  (* FIRST CHARACTER IS A VOWEL *)
    ASSIGN ( SOURCE, TARGET ) ;
    CONCAT ( 'WAY', TARGET )
    END
\allowbreak
ELSE
    BEGIN  (* FIRST CHARACTER IS NOT A VOWEL *)

    (* INITIALIZE TARGET *)
    ASSIGN ( NULLSTR, TARGET );

    (* LOOK FOR FIRST VOWEL *)
    I := 2 ;
    WHILE  NOT VOWEL ( GETCHAR(SOURCE, I) )  DO   I := I + 1 ;

    (* TRANSLATE *)
    SUBSTR ( SOURCE, TARGET, I, 1, LENGTH(SOURCE) + 1 - I ) ;
    SUBSTR ( SOURCE, TARGET, 1, LENGTH(SOURCE) + 2 - I, I - 1 ) ;
    CONCAT ( 'AY', TARGET )
    END ;
\allowbreak
(* OUTPUT *)
WRITELN ( ' INPUT : ', SOURCE ) ;
WRITELN ( ' OUTPUT: ', TARGET )
END.
\endcode

\topoutput
INPUT  :  AMERICA
OUTPUT :  AMERICAWAY

INPUT  :  STANFORD
OUTPUT :  ANFORDSTAY
\botoutput